﻿//清理重复数据
'use strict';
const db = uniCloud.database();

exports.main = async (event, context) => {
  console.log('【createMessageNotification】云函数被调用，event：', event);

  const { postId, senderId, receiverId, actionType, postTitle } = event;

  // 1. 校验参数
  const requiredParams = [
    { key: 'postId', value: postId },
    { key: 'senderId', value: senderId },
    { key: 'receiverId', value: receiverId },
    { key: 'actionType', value: actionType }
  ];
  const missingParams = requiredParams.filter(item => !item.value);
  if (missingParams.length > 0) {
    console.error('【createMessageNotification】参数缺失，返回失败：', missingParams);
    return { success: false, message: '参数缺失：' + missingParams.map(p => p.key).join(',') };
  }
  console.log('【createMessageNotification】参数校验通过，准备处理');

  // 2. 检查是否是自己给自己的帖子点赞/评论
  if (senderId === receiverId) {
    console.log('【createMessageNotification】检测到自操作，跳过消息生成');
    return { 
      success: true, 
      message: '自操作，无需生成消息',
      skipMessage: true
    };
  }

  try {
    // 3. 检查是否已存在相同的消息（改进的去重逻辑）
    console.log('【createMessageNotification】检查是否已存在相同消息');
    
    let existingMessageRes = null;
    
    if (actionType === 'like') {
      // 点赞：严格去重，同一用户对同一帖子只能有一条点赞消息
      existingMessageRes = await db.collection('interaction-messages')
        .where({
          receiver_id: receiverId,
          sender_id: senderId,
          post_id: postId,
          type: actionType
        })
        .get();
    } else if (actionType === 'comment') {
      // 评论：完全不去重，每次评论都生成消息
      // 注释掉去重逻辑，让每次评论都生成消息
      existingMessageRes = { data: [] }; // 强制为空，不过滤任何评论
    }

    if (existingMessageRes && existingMessageRes.data.length > 0) {
      console.log('【createMessageNotification】检测到重复消息，跳过生成');
      return { 
        success: true, 
        message: '消息已存在，跳过重复生成',
        skipMessage: true,
        existingMessage: existingMessageRes.data[0]
      };
    }

    // 4. 查询发送者（用户A）的昵称和头像
    console.log('【createMessageNotification】查询发送者信息，senderId：', senderId);
    const senderRes = await db.collection('uni-id-users')
      .doc(senderId)
      .field({ nickname: true, avatar_file: true }) // 注意：avatar_file 是对象
      .get();

    console.log('【createMessageNotification】查询发送者结果：', senderRes);
    if (!senderRes.data || senderRes.data.length === 0) {
      console.error('【createMessageNotification】发送者不存在，senderId：', senderId);
      return { success: false, message: '发送者用户不存在' };
    }

    // 5. 组装发送者信息
    const senderData = senderRes.data[0]; // 获取第一条数据
    const senderNickname = senderData.nickname || '用户';
    const senderAvatar = senderData.avatar_file?.url || '/static/images/default-avatar.png';
    console.log('【createMessageNotification】组装发送者信息：', { senderNickname, senderAvatar });

    // 6. 组装消息内容（只处理点赞和评论）
    let content = '';
    if (actionType === 'like') {
      content = `${senderNickname} 点赞了您的帖子《${postTitle || '未命名帖子'}》`;
    } else if (actionType === 'comment') {
      content = `${senderNickname} 评论了您的帖子《${postTitle || '未命名帖子'}》`;
    } else {
      console.error('【createMessageNotification】不支持的消息类型：', actionType);
      return { success: false, message: '不支持的消息类型：' + actionType };
    }
    console.log('【createMessageNotification】组装消息内容：', content);

    // 7. 存储消息到 interaction-messages 集合
    const notificationData = {
      receiver_id: receiverId, // 接收者（用户B）ID
      sender_id: senderId,     // 发送者（用户A）ID
      sender_nickname: senderNickname,
      sender_avatar: senderAvatar,
      post_id: postId,
      post_title: postTitle || '帖子', // 确保 post_title 字段存在
      type: actionType, // 使用 actionType 作为消息类型
      content: content,
      is_read: false, // 未读
      create_time: Date.now()
    };
    console.log('【createMessageNotification】准备插入数据库，数据：', notificationData);

    const result = await db.collection('interaction-messages').add(notificationData);
    console.log('【createMessageNotification】数据库插入结果：', result);

    return { success: true, message: '互动消息生成并存储成功', data: result };
  } catch (e) {
    console.error('【createMessageNotification】异常:', e);
    return { success: false, message: '消息生成失败：' + e.message };
  }
};
